Autoencoder হল একটি নিউরাল নেটওয়ার্ক আর্কিটেকচার যা অটোডেকোডিং এবং এঙ্কোডিং প্রক্রিয়া ব্যবহার করে ইনপুট ডেটার একটি সংকুচিত বা কমপ্রেসড রূপ তৈরি করতে সাহায্য করে। এটি সাধারণত ডেটা কমপ্রেশন, ডেনোয়াইজিং, এবং ফিচার লার্নিংয়ের জন্য ব্যবহৃত হয়।
একটি Simple Autoencoder সাধারণত তিনটি অংশে বিভক্ত:
- Encoder: এটি ইনপুট ডেটাকে সংকুচিত বা কমপ্রেসড ফর্মে রূপান্তরিত করে।
- Bottleneck: এটি এনকোডারের আউটপুট, যেখানে ইনপুট ডেটার কমপ্রেসড বা সংকুচিত রূপ রাখা হয়।
- Decoder: এটি বটলনেক থেকে সংকুচিত ডেটা পুনরুদ্ধার করে এবং ইনপুট ডেটার আউটপুট তৈরি করে।
এখানে একটি Simple Autoencoder মডেল তৈরি করা হবে যা Keras ব্যবহার করে একটি ছোট স্নায়ুকোষ (neural network) দিয়ে তৈরি হবে।
Step-by-Step: Simple Autoencoder মডেল তৈরি
1. লাইব্রেরি ইম্পোর্ট করা
প্রথমে, আমাদের প্রয়োজনীয় লাইব্রেরিগুলি ইম্পোর্ট করতে হবে।
import tensorflow as tf
from tensorflow.keras import layers, models
import numpy as np
import matplotlib.pyplot as plt
2. ডেটাসেট লোড করা
আমরা MNIST ডেটাসেট ব্যবহার করব, যা হস্তাক্ষরিত সংখ্যা ইমেজের একটি জনপ্রিয় ডেটাসেট।
# MNIST ডেটাসেট লোড করা
(x_train, _), (x_test, _) = tf.keras.datasets.mnist.load_data()
# ডেটার স্কেলিং: পিক্সেল মান [0, 255] থেকে [0, 1] এ পরিবর্তন
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
# ডেটাকে 2D এ ফ্ল্যাট করা (28x28 ইমেজ থেকে 784 ভেক্টর)
x_train = np.reshape(x_train, (x_train.shape[0], 28, 28, 1))
x_test = np.reshape(x_test, (x_test.shape[0], 28, 28, 1))
3. Autoencoder মডেল তৈরি করা
এখন, আমরা আমাদের Encoder এবং Decoder তৈরি করব এবং তাদের একত্রে একটি Autoencoder মডেল তৈরি করব।
- Encoder: ইনপুট ইমেজকে সংকুচিত করে।
- Decoder: সংকুচিত তথ্য থেকে পুনরুদ্ধার করে মূল ইমেজের কাছাকাছি আউটপুট তৈরি করে।
# Encoder
input_img = layers.Input(shape=(28, 28, 1)) # ইনপুট আকার
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(input_img) # 16 ফিল্টার সহ কনভোলিউশন
x = layers.MaxPooling2D((2, 2), padding='same')(x) # পুলিং
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x) # 8 ফিল্টার সহ কনভোলিউশন
encoded = layers.MaxPooling2D((2, 2), padding='same')(x) # বটলনেক
# Decoder
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(encoded) # ডিকোডিং কনভোলিউশন
x = layers.UpSampling2D((2, 2))(x) # আপসাম্পলিং
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(x) # 16 ফিল্টার সহ কনভোলিউশন
x = layers.UpSampling2D((2, 2))(x) # আপসাম্পলিং
decoded = layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x) # আউটপুট লেয়ার
# Autoencoder মডেল তৈরি
autoencoder = models.Model(input_img, decoded)
# Encoder মডেল তৈরি (এটি ফিচার এক্সট্রাক্টর হিসাবে ব্যবহার করা হবে)
encoder = models.Model(input_img, encoded)
# Decoder মডেল তৈরি (এটি এনকোডার আউটপুট গ্রহণ করে ডিকোড করবে)
encoded_input = layers.Input(shape=(7, 7, 8)) # বটলনেক আউটপুট আকার
decoder_layer = autoencoder.layers[-3:] # Decoder অংশের লেয়ারগুলি
decoder = models.Model(encoded_input, decoder_layer(encoded_input))
4. মডেল কম্পাইল করা
এখন, আমাদের মডেলটি কম্পাইল করতে হবে। আমরা binary_crossentropy লস ফাংশন ব্যবহার করব কারণ MNIST ডেটাসেট ইমেজ পিক্সেলগুলি 0 থেকে 1 পর্যন্ত স্কেল করা হয়েছে, এবং adam অপটিমাইজার ব্যবহার করব।
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
5. মডেল প্রশিক্ষণ
আমরা এখন মডেলটি ট্রেনিং করব।
autoencoder.fit(x_train, x_train, epochs=10, batch_size=128, shuffle=True, validation_data=(x_test, x_test))
6. ফলাফল দেখানো
মডেল প্রশিক্ষণের পর, আমরা কিছু ইমেজের পুনরুদ্ধার করা আউটপুট দেখাব।
# মডেল দ্বারা পুনর্গঠিত (reconstructed) ইমেজগুলি দেখানো
decoded_imgs = autoencoder.predict(x_test)
# কয়েকটি ইমেজ দেখানো
n = 10 # আমরা 10টি নমুনা দেখাব
plt.figure(figsize=(20, 4))
for i in range(n):
# আসল ইমেজ
ax = plt.subplot(2, n, i + 1)
plt.imshow(x_test[i].reshape(28, 28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
# পুনর্গঠিত ইমেজ
ax = plt.subplot(2, n, i + 1 + n)
plt.imshow(decoded_imgs[i].reshape(28, 28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
plt.show()
সারাংশ
এটি একটি Simple Autoencoder মডেল যা Keras ব্যবহার করে তৈরি করা হয়েছে। এই মডেলটি MNIST ডেটাসেটের ইমেজগুলো সংকুচিত (encoded) এবং পুনরুদ্ধার (decoded) করার জন্য ব্যবহৃত হয়। Autoencoder মডেলটি ডেটার কমপ্রেশন, ডেনোয়াইজিং এবং ফিচার লার্নিংয়ের জন্য ব্যবহার করা যেতে পারে। Keras এর মাধ্যমে আপনি খুব সহজেই এই ধরনের মডেল তৈরি এবং প্রশিক্ষণ করতে পারেন।
Read more